﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO_MechSys;
using BLL_MechSys;

namespace FORMS_MechSys
{
    public partial class frmVeiculoCadastro : Form
    {
        DTOVeiculo dtoVeiculo = new DTOVeiculo();
        BLLVeiculo bllVeiculo = new BLLVeiculo();
        BLLCliente bllCliente = new BLLCliente();
        DTOCliente dtoCliente = new DTOCliente();
        List<DTOVeiculo> ListVeiculos;
        
        
        DataTable dataTableGridView = new DataTable();
        int clienteID, veiculoID;

        BLLCor bllCor = new BLLCor();

        DTOCor dtoCorPrincipal = new DTOCor();
        DTOCor dtoCorFundo = new DTOCor();
        DTOCor dtoCorLetra = new DTOCor();
        DTOCor dtoCorDataGrid = new DTOCor();

        public frmVeiculoCadastro()
        {
            InitializeComponent();
            Habilitar(false);

            PopulaGrid();
            SetColors();
        }

        private void SetColors()
        {
            dtoCorPrincipal = bllCor.Buscar("Principal");
            toolStrip1.BackColor = btnCancelar.BackColor = toolStripButtonSair.BackColor =
              btnNovo.BackColor = btnEditar.BackColor = btnCancelar.BackColor = btnExcluir.BackColor = btnSalvar.BackColor =
              label4.BackColor = tableLayoutPanel2.BackColor = tableLayoutPanel3.BackColor = btnPesquisar.BackColor =
              btnBuscarCliente.BackColor = tableLayoutPanel5.BackColor = dtoCorPrincipal.Cor;

            dtoCorFundo = bllCor.Buscar("Fundo");
            tableLayoutPanel1.BackColor = tableLayoutPanel4.BackColor = dtoCorFundo.Cor;

            dtoCorDataGrid = bllCor.Buscar("DataGrid");
            dtGridVeiculos.BackgroundColor = dtoCorDataGrid.Cor;

            dtoCorLetra = bllCor.Buscar("Letra");
            label1.ForeColor = label2.ForeColor = label3.ForeColor = label4.ForeColor = label6.ForeColor =
                label12.ForeColor = label13.ForeColor = label17.ForeColor =
                label4.ForeColor = label6.ForeColor = btnBuscarCliente.ForeColor =
                btnEditar.ForeColor = btnExcluir.ForeColor = btnCancelar.ForeColor =
                btnNovo.ForeColor = btnSalvar.ForeColor = toolStripButtonSair.ForeColor = dtoCorLetra.Cor;
        }

        public void PopulaGrid()
        {
           
            DataRow dataRow;
            dataTableGridView = new DataTable();

            ListVeiculos = bllVeiculo.BuscarVeiculosCadastrados();
            try
            {
                if (ListVeiculos.Count > 0)
                {
                    dataTableGridView.Columns.Add("VeiculoID", typeof(int));
                    dataTableGridView.Columns.Add("Cliente", typeof(string));
                    dataTableGridView.Columns.Add("Placa", typeof(string));
                    dataTableGridView.Columns.Add("Marca", typeof(string));
                    dataTableGridView.Columns.Add("Modelo", typeof(string));
                    dataTableGridView.Columns.Add("AnoFab", typeof(string));
                    dataTableGridView.Columns.Add("AnoMod", typeof(string));

                    foreach (DTOVeiculo dtoVeiculo in ListVeiculos)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["VeiculoID"] = dtoVeiculo.VeiculoID;
                        dtoCliente = bllCliente.BuscarNomePorClienteID(dtoVeiculo.ClienteID);
                        dataRow["Cliente"] = string.Format("{0} {1}", dtoCliente.Nome, dtoCliente.Sobrenome);
                        dataRow["Placa"] = dtoVeiculo.Placa;
                        dataRow["Marca"] = dtoVeiculo.Marca;
                        dataRow["Modelo"] = dtoVeiculo.Modelo;
                        dataRow["AnoFab"] = dtoVeiculo.AnoFab;
                        dataRow["AnoMod"] = dtoVeiculo.AnoMod;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }

                }
            }
            catch(Exception)
            {
                if (new frmMessageBox().Show("Não foi possível carregar os dados para o grid!", "Carregamento", MessageBoxButtons.RetryCancel, MessageBoxIcon.Error) == DialogResult.Retry)
                {
                    PopulaGrid();
                }
            }

            dtGridVeiculos.DataSource = dataTableGridView;
        }

        public void PopulaGrid(string texto)
        {

            DataRow dataRow;
            dataTableGridView = new DataTable();

            ListVeiculos = bllVeiculo.PesquisarVeiculos(texto);
            try
            {
                if (ListVeiculos.Count > 0)
                {
                    dataTableGridView.Columns.Add("VeiculoID", typeof(int));
                    dataTableGridView.Columns.Add("Cliente", typeof(string));
                    dataTableGridView.Columns.Add("Placa", typeof(string));
                    dataTableGridView.Columns.Add("Marca", typeof(string));
                    dataTableGridView.Columns.Add("Modelo", typeof(string));
                    dataTableGridView.Columns.Add("AnoFab", typeof(string));
                    dataTableGridView.Columns.Add("AnoMod", typeof(string));

                    foreach (DTOVeiculo dtoVeiculo in ListVeiculos)
                    {
                        dataRow = dataTableGridView.NewRow();

                        dataRow["VeiculoID"] = dtoVeiculo.VeiculoID;
                        dtoCliente = bllCliente.BuscarNomePorClienteID(dtoVeiculo.ClienteID);
                        dataRow["Cliente"] = string.Format("{0} {1}", dtoCliente.Nome, dtoCliente.Sobrenome);
                        dataRow["Placa"] = dtoVeiculo.Placa;
                        dataRow["Marca"] = dtoVeiculo.Marca;
                        dataRow["Modelo"] = dtoVeiculo.Modelo;
                        dataRow["AnoFab"] = dtoVeiculo.AnoFab;
                        dataRow["AnoMod"] = dtoVeiculo.AnoMod;

                        // Adiciona linha ao DataTable.
                        dataTableGridView.Rows.Add(dataRow);

                    }

                }
            }
            catch (Exception)
            {
                new frmMessageBox().Show("Registro não encontrado!", "Pesquisa", MessageBoxButtons.OK, MessageBoxIcon.Information);               
            }

            dtGridVeiculos.DataSource = dataTableGridView;
        }

        public void Limpar()
        {            
            txtCliente.Clear();
            txtPlaca.Clear();
            txtMarca.Clear();
            txtModelo.Clear();
            txtAnoFab.Clear();
            txtAnoMod.Clear();
        }

        public void Habilitar(bool status)
        {
            panelDados.Enabled = status;
            btnBuscarCliente.Enabled = status;
            btnNovo.Enabled = !status;
            btnCancelar.Enabled = status;
            btnSalvar.Enabled = status;
        }
        
        private void btnNovo_Click(object sender, EventArgs e)
        {
            veiculoID = 0;
            Habilitar(true);
            Limpar();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            Habilitar(true);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            Limpar();
            Habilitar(false);
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(veiculoID.ToString()))
            {
                try
                {
                    bllVeiculo.Excluir(veiculoID);
                    new frmMessageBox().Show("Veículo excluído com sucesso!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    Limpar();

                    PopulaGrid();
                }
                catch
                {
                    new frmMessageBox().Show("Não foi possível excluir o veículo!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }

            else
            {
                new frmMessageBox().Show("Selecione um veículo para excluir!", "Exclusão", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void btnSalvar_Click(object sender, EventArgs e)
        {           
            if (bllVeiculo.VerificaSeVeiculoIDExiste(veiculoID) == false)
            {               
                try
                {
                    dtoVeiculo.ClienteID = clienteID;
                    dtoVeiculo.Placa = txtPlaca.Text;
                    dtoVeiculo.Marca = txtMarca.Text;
                    dtoVeiculo.Modelo = txtModelo.Text;
                    dtoVeiculo.AnoFab = Int32.Parse(txtAnoFab.Text);
                    dtoVeiculo.AnoMod = Int32.Parse(txtAnoMod.Text);

                    if (!string.IsNullOrEmpty(txtPlaca.Text) && !string.IsNullOrEmpty(clienteID.ToString()))
                    {
                         bllVeiculo.Inserir(dtoVeiculo);
                        new frmMessageBox().Show("Veículo cadastrado com sucesso!", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Limpar();
                        Habilitar(false);
                        PopulaGrid();
                    }
                    else
                    {
                        new frmMessageBox().Show("Os campos Cliente e Placa são obrigatórios!", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                }
                catch (Exception)
                {
                    new frmMessageBox().Show("Não foi possível cadastrar o veículo!", "Cadastro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                Atualizar();
            }            
           
        }

        private void Atualizar()
        {            
            try
            {
                dtoVeiculo.VeiculoID = veiculoID;
                dtoVeiculo.ClienteID = clienteID;
                dtoVeiculo.Placa = txtPlaca.Text;
                dtoVeiculo.Marca = txtMarca.Text;
                dtoVeiculo.Modelo = txtModelo.Text;
                dtoVeiculo.AnoFab = Int32.Parse(txtAnoFab.Text);
                dtoVeiculo.AnoMod = Int32.Parse(txtAnoMod.Text);

                if (!string.IsNullOrEmpty(txtPlaca.Text) && !string.IsNullOrEmpty(clienteID.ToString()))
                {
                    bllVeiculo.Atualizar(dtoVeiculo);
                    new frmMessageBox().Show("Veículo atualizado com sucesso!", "Atualização", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Limpar();
                    Habilitar(false);
                    PopulaGrid();
                }
                else
                {
                    new frmMessageBox().Show("Os campos Cliente e Placa são obrigatórios!", "Atualização", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
            catch (Exception)
            {
                new frmMessageBox().Show("Não foi possível atualizar o veículo!", "Atualização", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {
            timer.Enabled = true;
            frmClienteSelecionar frmSelecionaCliente = new frmClienteSelecionar();
            frmSelecionaCliente.ShowDialog();
            timer.Enabled = false;
        }

        private void toolStripButtonSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void timer_Tick(object sender, EventArgs e)
        {
            string clienteNome = BLLUtilitarios.clienteNome;
            clienteID = BLLUtilitarios.clienteID;
         
            if (!string.IsNullOrEmpty(clienteNome))
            {
                txtCliente.Text = clienteNome;             
            }
            if (!string.IsNullOrEmpty(clienteNome))
            {
                timer.Enabled = false;
            }           
        }

        private void dtGridVeiculos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                if(!string.IsNullOrEmpty(dtGridVeiculos.Rows[e.RowIndex].Cells["VeiculoID"].Value.ToString()))
                veiculoID = (int)dtGridVeiculos.Rows[e.RowIndex].Cells["VeiculoID"].Value;
                if (!string.IsNullOrEmpty(dtGridVeiculos.Rows[e.RowIndex].Cells["Cliente"].Value.ToString()))
                txtCliente.Text = (string)dtGridVeiculos.Rows[e.RowIndex].Cells["Cliente"].Value;
                if (!string.IsNullOrEmpty(dtGridVeiculos.Rows[e.RowIndex].Cells["Placa"].Value.ToString()))
                txtPlaca.Text = (string)dtGridVeiculos.Rows[e.RowIndex].Cells["Placa"].Value;
                if (!string.IsNullOrEmpty(dtGridVeiculos.Rows[e.RowIndex].Cells["Marca"].Value.ToString()))
                txtMarca.Text = (string)dtGridVeiculos.Rows[e.RowIndex].Cells["Marca"].Value;
                if (!string.IsNullOrEmpty(dtGridVeiculos.Rows[e.RowIndex].Cells["Modelo"].Value.ToString()))
                txtModelo.Text = (string)dtGridVeiculos.Rows[e.RowIndex].Cells["Modelo"].Value;
                if (!string.IsNullOrEmpty(dtGridVeiculos.Rows[e.RowIndex].Cells["AnoFab"].Value.ToString()))
                txtAnoFab.Text = dtGridVeiculos.Rows[e.RowIndex].Cells["AnoFab"].Value.ToString();
                if (!string.IsNullOrEmpty(dtGridVeiculos.Rows[e.RowIndex].Cells["AnoMod"].Value.ToString()))
                txtAnoMod.Text = (string)dtGridVeiculos.Rows[e.RowIndex].Cells["AnoMod"].Value;          


                Habilitar(false);
                btnEditar.Enabled = true;
            }
        }

        private void btnPesquisar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(txtPesquisar.Text))
            {
                PopulaGrid(txtPesquisar.Text);
            }
        }

    }
}
